package data_structure.sequence_table;

/**
 * capacity容量
 * 判断线性表是否为空empty
 * 1.ArrayList各个方法的作用
 *            实现原理
 *            时间复杂度
 * 2.扩容
 */
public class MyArrayList  {
    private Long[] array;//容量
    private int size;//元素个数

    //构造方法
    //无参构造
    public MyArrayList() {
        //容量没有规定，自行定义
        this.array=new Long[16];
        //对数组初始化null,没有必要
        //因为数组中元素默认值就是0的变形，int 0,boolean false，引用类型null
        for (int i = 0; i < array.length; i++) {
            array[i]=null;
        }
        this.size=0;//元素个数为0
    }
    //有参构造
    public MyArrayList(int initialCapacity){
        //初始容量规定initialCapacity
        this.array=new Long[initialCapacity];
        for (int i = 0; i < array.length; i++) {
            array[i]=null;
        }
        this.size=0;
    }
    //size方法，返回元素个数
    public int size(){
        return size;
    }
    public void add(int index,Long e){
        if(index<0||index>size){
            throw new ArrayIndexOutOfBoundsException("下标不合法");
        }
        for (int i = size-1; i >=index; i--) {
            array[i+1]=array[i];
        }
        array[index]=e;
        size=size+1;//元素个数增加1
    }

    private static void 断言顺序表的元素个数一定是(MyArrayList list,int size){
        if(list.size!=size){
            throw new RuntimeException();
        }
    }

    public static void main(String[] args) {
        MyArrayList list=new MyArrayList();
        if(list.size<0){
            throw new RuntimeException();
        }

        if(list.size>list.array.length){
            throw new RuntimeException();
        }
        for (int i = 0; i < list.size; i++) {
            if(list.array[i]==null){
                throw new RuntimeException();
            }
        }
        for (int i = 0; i < list.array.length; i++) {
            if(list.array[i]!=null){
                throw new RuntimeException();
            }
        }
        //无参构造方法定义的顺序表，size应该是0
        if(list.size!=0){
            throw new RuntimeException();
        }
    }
}
